package com.zjp.reflect;

import com.zjp.entity.User;

import java.lang.reflect.Field;

/**
 * @author: zjp
 * @date: 2023-12-02
 * @description: 测试获取类中的成员变量
 */
public class Test3_GetField {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Class<User> uClazz = User.class; // 首先都是先获取Class对象

        // 1.使用该方法可以获取所有属性，包括私有的
        Field[] allFields = uClazz.getDeclaredFields();
        for (Field field : allFields) {
            System.out.println(field.getName() + "---> " + field.getType());
        }

        // 2.获取指定属性，私有的也可以获取
        Field fName = uClazz.getDeclaredField("name");
        if (fName != null){
            System.out.println(fName.getName() + "---> " + fName.getType());
        }

        // 3.使用 field.set(object, value) 方法设置属性值
        User user = new User();
        fName.setAccessible(true); // 一般都先设置一下放开访问权限，防止是private修饰的
        fName.set(user, "zjp"); // 设置 user 对象的 name 属性的值为 zjp

        // 4.使用 field.get(object) 方法获取属性值
        System.out.println(fName.get(user)); // 获取 user 对象的 name 属性的值
    }
}
